package com.example.loginserver.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.concurrent.TimeUnit;

public class JwtUtils {

    //    密钥长度必须为32位
    private static final String SIGN_KEY = "12345678912345678912345678912312";

    /**
     * 创建token
     *
     * @param userName
     * @return
     */
    public static String createToken(String userName) {

        Date generateDate = new Date();

        Date expirationDate = new Date(generateDate.getTime() + TimeUnit.DAYS.toMillis(7));

        return Jwts.builder()
                .setHeaderParam("typ", "JWT")
                .setSubject(userName)
//                jwt token 的生成日期
                .setIssuedAt(generateDate)
//                过期时间
                .setExpiration(expirationDate)
                .signWith(SignatureAlgorithm.HS256, SIGN_KEY)
                .compact();
    }

    /**
     * 验证签名并返回jwt 中的body 部分的内容
     *
     * @param jwtToken
     * @return
     */
    public static Claims parseToken(String jwtToken) {

        return Jwts.parser()
                .setSigningKey(SIGN_KEY)
                .parseClaimsJws(jwtToken)
//                .parseClaimsJwt(jwtToken)
                .getBody();

    }

    /**
     * 判断token是否过期
     *
     * @param claimsBody
     * @return
     */
    public static boolean isTokenExpired(Claims claimsBody) {
        return claimsBody.getExpiration().before(new Date());
    }

}
